package com.stu.day10.singleton;

/**
 * 懒汉式:
 * 只有在需要时才创建实例，节省资源。
 * 线程安全问题：在多线程环境下，第一次调用时多个线程同时进入 if (instance == null) 可能会导致创建多个实例。
 * 使用 synchronized 会影响性能，因为每次调用 getInstance() 时都需要同步。
 * @author zy
 * @date 2025/2/1 19:57
 */
public class SingletonDemo2 {
    // 没有初始化实例，只有在调用时才创建
    private static SingletonDemo2 instance;

    // 私有构造函数，防止外部创建多个实例
    private SingletonDemo2() {
        System.out.println("构造方法");
    }

    // 提供公共的静态方法访问实例
    public static synchronized SingletonDemo2 getInstance() {
        if (instance == null) {
            instance = new SingletonDemo2();
        }
        return instance;
    }
}
class ThreadTest{
    public static void main(String[] args) {

        for (int i = 0; i < 100; i++) {
            Thread t = new Thread(()->{
                //若没synchronized则创建多个实例
                SingletonDemo2 s = SingletonDemo2.getInstance();
            });

            //并不是调用start方法,线程就一定先执行.
            //只是告诉JVM当前线程需要执行,真正调度还是CPU
            t.start();
        }
    }
}
